#include "lrcpage.h"
#include "ui_lrcpage.h"

#include<QFile>
#include<QDebug>

LrcPage::LrcPage(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LrcPage)
{
    ui->setupUi(this);
    //将窗口的标题栏去掉
    this->setWindowFlag(Qt::FramelessWindowHint);

    //设置隐藏动画
    hideAnimal = new QPropertyAnimation(this,"geometry",this);
    hideAnimal->setDuration(250);
    hideAnimal->setStartValue(QRect(0,0,this->width(),this->height()));//起始帧
    hideAnimal->setEndValue(QRect(0,this->height(),this->width(),this->height()));//结束帧

    //隐藏按钮的动画
    connect(ui->hideBt,&QPushButton::clicked,this,[=](){
        hideAnimal->start();
    });

    //当收到动画结束时彻底隐藏this
    connect(hideAnimal,&QPropertyAnimation::finished,this,[=](){
        this->hide();
    });

}

LrcPage::~LrcPage()
{
    delete ui;
}

bool LrcPage::parseLrc(const QString &lrcPath)
{
    //先将之前的歌词清除
    lrcLines.clear();
    QFile lrcFile(lrcPath);
    if(!lrcFile.open(QFile::ReadOnly))
    {
        qDebug()<<"打开文件："<<lrcPath;
        return false;
    }
    while(!lrcFile.atEnd())
    {
        QString lrcWord = lrcFile.readLine(1024);
        //设置解析lrc文件的其中一行[0:58.600.00]你像⼀只⻜来⻜去的蝴蝶
                             // [00:17.94]那些失眠的⼈啊 你们还好吗
        int left = lrcWord.indexOf('[');
        int right = lrcWord.indexOf(']');

        // 解析时间
        qint64 lineTime = 0;
        int start = 0;
        int end = 0;
        QString time = lrcWord.mid(left, right-left+1);//拿到[00:17.94]

        //解析分钟
        start = 1;
        end = time.indexOf(':');
        lineTime += time.mid(start,end-start).toInt()*60*1000;

        //解析秒
        start = end+1;
        end = time.indexOf('.',start);
        lineTime += time.mid(start,end-start).toInt()*1000;

        //解析毫秒
        start = end+1;
        end = time.indexOf('.', start);
        lineTime += lrcWord.mid(start, end-start).toInt();

        //解析歌词
        QString word = lrcWord.mid(right+1).trimmed();
        lrcLines.push_back(LrcLine(lineTime,word));
    }
    return true;
}

int LrcPage::getLineLrcWordIndex(qint64 pos)
{
     // 如果歌词是空的，返回-1
     if(lrcLines.isEmpty())
     {
        return -1;
     }
     //如果歌词的时间还要小于pos就让他为0
     if(lrcLines[0].time > pos)
     {
        return 0;
     }
     // 通过时间⽐较，获取下标
     for(int i = 1; i < lrcLines.size(); ++i)
     {
         //当pos的位置夹在中间，就返回前一个
         if(pos > lrcLines[i-1].time && pos <= lrcLines[i].time)
         {
            return i-1;
         }
     }
     // 如果没有找到，返回最后⼀⾏
     return lrcLines.size()-1;
}

QString LrcPage::getLineLrcWord(qint64 index)
{
    if(index < 0 || index >= lrcLines.size())
     {
     return "";
     }
    return lrcLines[index].text;
}

void LrcPage::showLrcWord(int time)
{
    // 先要获取歌词--根据歌词的时间进⾏获取
     int index = getLineLrcWordIndex(time);
     if(-1 == index)
      {
          ui->line1->setText("");
          ui->line2->setText("");
          ui->line3->setText("");
          ui->lineCenter->setText("当前歌曲⽆歌词");
          ui->line4->setText("");
          ui->line5->setText("");
          ui->line6->setText("");
      }
     else
     {
          ui->line1->setText(getLineLrcWord(index-3));
          ui->line2->setText(getLineLrcWord(index-2));
          ui->line3->setText(getLineLrcWord(index-1));
          ui->lineCenter->setText(getLineLrcWord(index));
          ui->line4->setText(getLineLrcWord(index+1));
          ui->line5->setText(getLineLrcWord(index+2));
          ui->line6->setText(getLineLrcWord(index+3));
     }
}

void LrcPage::setHeadInfo(const QString &musicNmae, const QString &musicSinger)
{
    ui->musicName->setText(musicNmae);
    ui->musicSinger->setText(musicSinger);
}


